OmniThreadLibrary 3.07.2 has just been released. It is available via
GIT (https://github.com/gabr42/OmniThreadLibrary/tree/release-3.07.2)
or as a ZIP archive
(https://drive.google.com/file/d/0BwqVlLNTK4OxM2d1ckpzMlp2YW8/view?usp=sharing).

What is OmniThreadLibrary?
==========================

OmniThreadLibrary is simple to use threading library for Delphi. It's
main "selling" points (besides the price, of course are power,
simplicity, and openess. With just few lines of code, you can set up
multiple threads, send messages between them, process Windows messages
and more. OmniThreadLibrary doesn't limit you in any way - if it is not
powerfull enough for you, you can ignore any part of its "smartness"
and replace it with your own code. If you don't like working with
threads - no problem! You can use high-level primitives like parallel
for, futures and pipelines to introduce parallelism into your
application.

OmniThreadLibrary is an open source project. It lives in the Google
Code and is licensed under the BSD license.

At the moment, OmniThreadLibrary supports Delphi 2007, 2009, 2010, XE,
XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, and 10.2 Tokyo
on the Win32 and Win64 platforms. 

Currently, there are no plans to support older Delphi compilers and .NET. 
XE2+ support is limited to Windows targets. Firemonkey is currently not 
supported.

Where can I get more information?
=================================

Home page: http://www.omnithreadlibrary.com/
Google+ Community: https://plus.google.com/communities/112307748950248514961
Downloads: https://drive.google.com/folderview?id=0BwqVlLNTK4OxVEgzZnZGM1FNMGc&usp=drive_web#list
Repository: https://github.com/gabr42/OmniThreadLibrary
Issue tracker: https://github.com/gabr42/OmniThreadLibrary/issues
Author's blog: http://thedelphigeek.com
Author's home page: http://primoz.gabrijelcic.org
Documentation wiki: http://otl.17slon.com/book/
Documentation book: http://leanpub.com/omnithreadlibrary
Webinars: http://www.omnithreadlibrary.com/webinars.htm

Changes since version 3.07.1
============================

- Potentially breaking change:
  - Cancel(taskID) will signal task's cancellation token before calling task's Terminate
    method. CancelAll will signal cancellation token for all running tasks before calling
    their Terminate method.
    Old behaviour (no CancellationToken.Signal before Terminate) can be achieved by
    calling overloaded version of the functions accepting the `signalCancellationToken`
    parameter or by setting IOmniThreadPool.Options to [tpoPreventCancellationTokenOnCancel].
- New features:
  - Added OnStop overload that accepts 'reference to procedure (const task: IOmniTask)'
    to Parallel.Join and Parallel.ParallelTask.
  - Added OnStopInvoke to all Parallel abstractions that implement OnStop method.
    - IOmniParallelLoop<T>.OnStopInvoke and IOmniParallelMapper<T1, T2> are only
      available on XE7 and newer compilers.
  - Added IOmniTaskConfig.NoThreadPool. This allows high-level abstractions to
    bypass thread pool entirely and run in 'non-pooled' threads.
- Bug fixes:
  - Parallel.Future did not create task with the .Unobserved qualifier.
- New demos:
  - 66_ThreadsInThreads: Demonstrates how to manage OTL threads from other OTL threads
    and from TThread threads.

--
Primoz
[http://thedelphigeek.com]